package com.example.concurrency.thread02;

/**
 * @description:
 * @program: demos
 * @author: dove
 * @date: 2020-12-03 01:17
 * 窗口取号：使用static修饰起始号码用来计数，虽然做到了共享资源，但是也产生了其他问题：
 *  1.线程安全问题
 *  2.static修饰的变量生命周期非常长，可以理解为随着jvm一起消亡，也会产生一些问题（空间占用问题，脏数据问题）
 *  3.并非所有的变量都可以用static修饰的，这里只是一个int类型的变量，假如是一段逻辑代码的呢
 *
 *  更好的做法是实现runnable接口来完成我们的设计（策略模式）
 *
 **/

public class CounterWindowThread extends Thread{

    // 窗口名称
    private final String windowName;
    // 最多受理50笔业务
    private static final int MAX = 50;
    // 起始号码
    private static int index = 1;
//    AtomicInteger index = new AtomicInteger(1);

    public CounterWindowThread(String windowName){
        this.windowName = windowName;
    }

    @Override
    public void run() {
        while (index <= MAX){
            System.out.format("请[%d]号到[%s]办理业务\n",index++,windowName);
        }
    }

    public static void main(String[] args) {
        new CounterWindowThread("一号窗口").start();
        new CounterWindowThread("二号窗口").start();
        new CounterWindowThread("三号窗口").start();
        new CounterWindowThread("四号窗口").start();
    }
}
